#include <unistd.h>    
#include <stdio.h>    
#include <sys/wait.h>    
#include <stdlib.h>
#include <vector>
#include <iostream>
using namespace std;

typedef void (*def) ();  // 函数指针

vector<def> v;
void test1()
{
  printf("处理工作1\n");
  sleep(1);
}

void test2()
{
  printf("处理工作2\n");
  sleep(1);
}

void push()
{
  v.push_back(test1);
  v.push_back(test2);
}
int main()    
{    
  pid_t id = fork();    
  if (id == 0)    
  {    
      int i = 0;    
      for (i = 0; i < 3; i++)    
      {    
            printf("%d\n", i + 1);    
            sleep(1);    
      }    
      exit(110);  // 子进程退出                                                                                                 
  }    
  int status = 0; 
  // 非阻塞等待，等待过程中父进程可以处理自己的事情
  pid_t res = waitpid(id, &status, WNOHANG);  // 指定 输出型参数 阻塞等待
  push();
  while (res == 0)
  {
    // 子进程还没有退出
    // 父进程执行其任务
    v.front()();
    v.back()();
    res = waitpid(id, &status,WNOHANG);  // 指定 输出型参数 阻塞等待    
  }
  if (res > 0)    
  {    
      printf("子进程退出码:%d\n退出信号:%d\n", WEXITSTATUS(status), (status & 0x7F));    
  }    
  return 0;    
}
